#include <stdio.h>
#include <string.h>

#include <stdio.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <unistd.h>
#include <string.h>

int main()
{
    int fd = open("myfile", O_RDONLY);
    if (fd < 0)
    {
        perror("open");
        return 1;
    }
    const char *msg = "hello IO!\n";
    char buf[1024];
    while (1)
    {
        ssize_t s = read(fd, buf, strlen(msg)); // 类⽐write
        if (s > 0)
        {
            printf("%s", buf);
        }
        else
        {
            break;
        }
    }
    close(fd);
    return 0;
}
// int main()
// {
//     umask(0);
//     int fd = open("myfile", O_WRONLY | O_CREAT, 0644);
//     if (fd < 0)
//     {
//         perror("open");
//         return 1;
//     }
//     int count = 5;
//     const char *msg = "hello bit!\n";
//     int len = strlen(msg);
//     while (count--)
//     {
//         write(fd, msg, len); // fd: 后⾯讲， msg：缓冲区⾸地址， len: 本次读取，期望写⼊多少个字节的数据。 返回值：实际写了多少字节数据
//     }
//     close(fd);
//     return 0;
// }

// #include <stdio.h>
// #define ONE 0001   // 0000 0001
// #define TWO 0002   // 0000 0010
// #define THREE 0004 // 0000 0100
// void func(int flags)
// {
//     if (flags & ONE)
//         printf("flags has ONE! ");
//     if (flags & TWO)
//         printf("flags has TWO! ");
//     if (flags & THREE)
//         printf("flags has THREE! ");
//     printf("\n");
// }
// int main()
// {
//     func(ONE);
//     func(THREE);
//     func(ONE | TWO);
//     func(ONE | THREE | TWO);
//     return 0;
// }

// int main(int argc, char *argv[]) {}
// {
//     FILE *fp;
//     int net = 0;
//     if (argc != 2)
//     {
//         printf("failed!\n");
//         return -1;
//     }
//     fp = fopen(argv[1], "r");
//     if (fp == NULL)
//     {
//         printf("open file failed!\n");
//         return -2;
//     }
//     while (1)
//     {
//         net = fgetc(fp);
//         if (feof(fp))
//         {
//             break;
//         }
//         fputc(net, stdout);
//     }
//     fclose(fp);
//     return0;
// }

// int main()
// {
//     const char *msg = "hello fwrite\n";
//     fwrite(msg, strlen(msg), 1, stdout);
//     printf("hello printf\n");
//     fprintf(stdout, "hello fprintf\n");
//     return 0;
// }

// #include <stdio.h>
// #include <string.h>

// int main(int argc, char *argv[])
// {
//     if (argc != 2)//cat+文件
//     {
//         printf("argv error!\n");
//         return 1;
//     }

//     FILE *fp = fopen(argv[1], "r");
//     if (!fp)
//     {
//         printf("fopen error!\n");
//         return 2;
//     }
//     char buf[1024];
//     while (1)
//     {
//         int s = fread(buf, 1, sizeof(buf), fp);
//         if (s > 0)
//         {
//             buf[s] = 0;
//             printf("%s", buf);
//         }
//         if (feof(fp))
//         {
//             break;
//         }
//     }
//     fclose(fp);
//     return 0;
// }
// #include <stdio.h>
// #include <string.h>

// #include <stdio.h>
// #include <string.h>
// int main()
// {
//     FILE *fp = fopen("myfile", "r");
//     if (!fp)
//     {
//         printf("fopen error!\n");
//         return 1;
//     }
//     char buf[1024];
//     const char *msg = "hello bit!\n";
//     while (1)
//     {
//         // 注意返回值和参数，此处有坑，仔细查看man⼿册关于该函数的说明
//         size_t s = fread(buf, 1, strlen(msg), fp);
//         if (s > 0)
//         {
//             buf[s] = 0;
//             printf("%s", buf);
//         }
//         if (feof(fp))
//         {
//             break;
//         }
//     }
//     fclose(fp);
//     return 0;
// }

// 写入文件
//  int main()
//  {
//      FILE *fp = fopen("myfile", "w");
//      if (!fp)
//      {
//          printf("fopen error!\n");
//      }
//      const char *msg = "hello IO!\n";
//      int count = 5;
//      while (count--)
//      {
//          fwrite(msg, strlen(msg), 1, fp);
//      }
//      fclose(fp);
//      return 0;
//  }

// 打开文件
//  int main()
//  {
//      FILE *fp = fopen("myfile", "w");
//      if (!fp)
//      {
//          printf("fopen error!\n");
//      }
//      while(1);//这里我们等待，查看进程
//      fclose(fp);
//      return 0;
//  }